package users_api

import (
	"software/global"
	"software/models/res"
	"software/service"
	"strconv"

	"github.com/gin-gonic/gin"
)

// BanUserView 封禁用户
func (u UsersApi) BanUserView(c *gin.Context) {
	idStr := c.Param("id")     // 用户 ID
	daysStr := c.Query("days") // 封禁天数

	id, err := strconv.ParseUint(idStr, 10, 64)
	if err != nil {
		res.FailWithMsg("无效的用户 ID", c)
		return
	}

	days, err := strconv.Atoi(daysStr)
	if err != nil || days < -1 || days == 0 {
		res.FailWithMsg("封禁天数无效", c)
		return
	}

	// 调用服务层封禁用户
	err = service.BanUserById(int8(id), days)
	if err != nil {
		res.FailWithMsg(err.Error(), c)
		return
	}

	res.OKWithMsg("用户已成功封禁", c)
}

/**
 * 解封用户
 */
func (u UsersApi) UnbanUserView(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseUint(idStr, 10, 64)
	if err != nil {
		res.FailWithMsg("无效的用户 ID", c)
		return
	}
	err = service.UnbanUserById(int8(id))
	if err != nil {
		res.FailWithMsg("解封用户失败", c)
	}
	res.OKWithMsg("用户已解封", c)
}

/**
 * 获取用户总数
 */
func (u UsersApi) TotalUsers(c *gin.Context) {
	count, err := service.QueryAllUsersCount()
	if err != nil {
		global.Log.Errorf("查询用户总数失败：%v", err)
		res.FailWithMsg("查询用户总数失败", c)
		return
	}
	// 返回成功响应，携带用户总数
	res.OKWithData(gin.H{"total_users": count}, c)
}

/**
 * 获取最新用户10
 */
func (u UsersApi) ListNewUsers(c *gin.Context) {
	// 调用服务层方法查询最新用户
	users, err := service.QueryUserByNew()
	if err != nil {
		// 如果查询失败，返回错误信息
		res.FailWithMsg("查询最新用户失败: "+err.Error(), c)
		return
	}

	// 查询成功，返回用户数据
	res.OKWithData(users, c)
}

/*
*

	获取用户信息
*/
func (u UsersApi) ListAllUsers(c *gin.Context) {
	// 获取查询参数
	page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
	keyword := c.DefaultQuery("keyword", "")
	status := c.DefaultQuery("status", "") // 状态：0-正常，1-临时封禁，-1-永久封禁，2-注销

	// 参数验证
	if page < 1 {
		page = 1
	}
	if pageSize < 1 || pageSize > 100 {
		pageSize = 10
	}

	// 调用服务层查询
	users, total, err := service.QueryUserList(page, pageSize, keyword, status)
	if err != nil {
		res.FailWithMsg(err.Error(), c)
		return
	}

	// 返回结果
	res.OKWithData(gin.H{
		"list":     users,
		"total":    total,
		"page":     page,
		"pageSize": pageSize,
	}, c)
}

func (u UsersApi) DeleteUsers(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseUint(idStr, 10, 64)
	if err != nil {
		res.FailWithMsg("无效的用户 ID", c)
		return
	}

	err = service.DeleteUserById(uint(id)) // 调用服务层，删除指定 ID 的用户
	if err != nil {
		res.FailWithMsg(err.Error(), c)
		return
	}

	res.OKWithMsg("用户已成功删除", c)
}

// SoftDeleteUsers 将用户软删除（状态置为4）
func (u UsersApi) SoftDeleteUsers(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseUint(idStr, 10, 64)
	if err != nil {
		res.FailWithMsg("无效的用户 ID", c)
		return
	}

	err = service.SoftDeleteUserById(uint(id)) // 调用服务层，软删除指定 ID 的用户
	if err != nil {
		res.FailWithMsg(err.Error(), c)
		return
	}

	res.OKWithMsg("用户已成功删除", c)
}
